placesview: hold onto ref during (un)mount ops
authorChristian Kellner <christian@kellner.me>
Sun, 4 Sep 2016 09:47:55 +0000 (11:47 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 9 Sep 2016 20:55:47 +0000 (16:55 -0400)
During mount and unmount opertions we keep a reference to the
GtkPlacesView around, so we have a valid view for the callback
code, even in the case that othe external references have been
dropped (i.e. the containing window gets destroyed).

https://bugzilla.gnome.org/show_bug.cgi?id=764979

gtk/gtkplacesview.c

index 4817c4b20ac7ee0e69820595ea4af22222e5e2f4..581c4ccd8e99ef7d48f76ef445cff8dc424ef55d 100644 (file)
@@ -1207,6 +1207,7 @@ server_mount_ready_cb (GObject      *source_file,
     }
 
   update_places (view);
+  g_object_unref (view);
 }
 
 static void
@@ -1277,6 +1278,7 @@ volume_mount_ready_cb (GObject      *source_volume,
     }
 
   update_places (view);
+  g_object_unref (view);
 }
 
 static void
@@ -1311,6 +1313,8 @@ unmount_ready_cb (GObject      *source_mount,
 
       g_clear_error (&error);
     }
+
+  g_object_unref (view);
 }
 
 static gboolean
@@ -1355,6 +1359,8 @@ unmount_mount (GtkPlacesView *view,
   priv->unmounting_mount = TRUE;
   update_loading (view);
 
+  g_object_ref (view);
+
   operation = gtk_mount_operation_new (GTK_WINDOW (toplevel));
   g_mount_unmount_with_operation (mount,
                                   0,
@@ -1398,6 +1404,9 @@ mount_server (GtkPlacesView *view,
 
   g_mount_operation_set_password_save (operation, G_PASSWORD_SAVE_FOR_SESSION);
 
+  /* make sure we keep the view around for as long as we are running */
+  g_object_ref (view);
+
   g_file_mount_enclosing_volume (location,
                                  0,
                                  operation,
@@ -1430,6 +1439,9 @@ mount_volume (GtkPlacesView *view,
 
   g_mount_operation_set_password_save (operation, G_PASSWORD_SAVE_FOR_SESSION);
 
+  /* make sure we keep the view around for as long as we are running */
+  g_object_ref (view);
+
   g_volume_mount (volume,
                   0,
                   operation,